#include "cpu/exec/template-start.h"

#define instr push

static void do_execute() {
    // 根据操作数大小调整堆栈指针并写入数据
    if(DATA_BYTE == 2) {
        // 16位操作数
        cpu.esp -= 2;
        swaddr_write(cpu.esp, 2, op_src->val & 0xFFFF);  // 
    } else {
        // 32位操作数  
        cpu.esp -= 4;
        swaddr_write(cpu.esp, 4 , op_src->val);
    }
    
    print_asm_template1();
}

// 支持所有 PUSH 指令类型
make_instr_helper(r)    // push reg: 50+rd (push eax/ecx/edx/ebx/esp/ebp/esi/edi)
make_instr_helper(rm)   // push r/m: FF /6 
make_instr_helper(i)    // push imm32: 68 iw/id 
#if DATA_BYTE == 1
make_instr_helper(si)
#endif
#include "cpu/exec/template-end.h"